/**
 * 
 */
package ar.edu.unq.svnpermission.ui.model;

import java.io.Serializable;
import java.util.List;

import org.uqbar.commons.model.Home;

import ar.edu.unq.svnpermission.domain.User;
import ar.edu.unq.svnpermission.ui.exceptions.InvalidLoginException;
import ar.unq.edu.svnpermission.homes.SvnPermission;
import ar.unq.edu.svnpermission.homes.UserHome;
import ar.unq.edu.svnpermission.utils.Encriptor;



/**
 * Define el caso de uso autenticar
 * @author nicolas
 *
 */
public class Login extends UseCase
{
	private static final long serialVersionUID = 1L;
	private String userName;
	private String userPassword;

	/**
	 * Autentica a un usuario
	 * @param email Email del usuario
	 * @param password Password del usuario
	 * @return True en el caso de que el email y passsword sean correctos. False en caso contrario
	 */
	public Boolean authenticate()
	{
		User user = this.getHome(User.class,UserHome.class).createExample();
		user.setEmail(this.getUserName());
		
		//Obtengo el User buscado desde el repositorio
		List<User> users = this.getHome(User.class,UserHome.class).searchByExample(user);

		//Si la lista es vacia o no coincide el password, 
		//lanzo una excepciòn indicando que el login fallo.
		if (users.isEmpty())
			throw new InvalidLoginException();
		
		//Asigno el usuario obtenido
		user = users.get(0);
		
		if(!Encriptor.encrypt(this.getUserPassword()).equals(user.getPassword()))
			throw new InvalidLoginException();
		
		return true;
		
		
	}

	
	//Accessors
	public String getUserName() {
		return userName;
	}

	public String getUserPassword() {
		return userPassword;
	}

	public void setUserPassword(String userPassword) {
		this.userPassword = userPassword;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}
	
}
